/* Example from https://www.rfc-editor.org/rfc/rfc4506#section-7 */

const MAXUSERNAME = 32; /* max length of a user name */
const MAXFILELEN = 65535; /* max length of a file */
const MAXNAMELEN = 255; /* max length of a file name */

/*
 * Types of files:
 */
enum filekind {
   TEXT = 0, /* ascii data */
   DATA = 1, /* raw data   */
   EXEC = 2  /* executable */
};

/*
 * File information, per kind of file:
 */
union filetype switch (filekind kind) {
case TEXT:
   void; /* no extra information */
case DATA:
   string creator<MAXNAMELEN>; /* data creator */
case EXEC:
   string interpretor<MAXNAMELEN>; /* program interpretor */
};
/*
 * A complete file:
 */
struct file {
   string filename<MAXNAMELEN>; /* name of file */
   filetype type; /* info about file */
   string owner<MAXUSERNAME>; /* owner of file */
   opaque data<MAXFILELEN>; /* file data */
};
